﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using GC2.Bussines;
using GC2.Bussines.BMAdmin;
using GC2.Entities.Admin;
using GC2.Entities.Seguridad;
using GC2.ExceptionHandler;

public partial class Informes_Articulo : GenericPage
{
    #region Propiedades
    Usuarios usuario = new Usuarios();
    Clientes clienteActual = new Clientes();    
    List<Clientes> listClientes = new List<Clientes>();
    private ExceptionConstructor exNew = new ExceptionConstructor();
    #endregion

    #region Controles

    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            SetearCultura();
            SetearConexion();
            if (!this.IsPostBack)
            {
                usuario = (Usuarios)Session["UsuarioActual"];
                Limpiar();

                DateTime dHoy = DateTime.Now.Date;
                FechaH.SetFecha(dHoy);
                string sUno = "01/";
                sUno += dHoy.Month.ToString();
                sUno += "/";
                sUno += dHoy.Year.ToString();

                FechaD.SetFecha(Convert.ToDateTime(sUno));

                Stock articulo = new Stock();
                articulo = (Stock)Session["Stock"];
                txtCodigo.Text = articulo.Id_Articulo.ToString();
                txtNombre.Text = articulo.Articulo;

                string sTipo = Session["Tipo"].ToString();
                if (sTipo == "Ventas")
                {
                    trCompras.Visible = false;
                    trBalance.Visible = false;
                }
                if (sTipo == "Compras")
                {
                    trVentas.Visible = false;
                    trBalance.Visible = false;
                }
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }

    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        Response.Redirect("~/Seguridad/Default.aspx", false);
    }

    protected void gvVentas_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        try
        {
            gvVentas.PageIndex = e.NewPageIndex;
            CargarVentas();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }

    protected void gvCompras_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        try
        {
            gvCompras.PageIndex = e.NewPageIndex;
            CargarCompras();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }

    protected void btnOtro_Click(object sender, EventArgs e)
    {
        Response.Redirect("~/Informes/StockAdmin.aspx", false);
    }

    protected void btnVer_Click(object sender, EventArgs e)
    {
        try
        {
            if (FechaD.GetFecha() > FechaH.GetFecha())
            {
                // mensaje error en fecha
                mpeFecha.Show();
            }
            else
            {
                string sTipo = Session["Tipo"].ToString();

                if (sTipo != "Compras")
                {
                    // Ventas o Balance
                    Ventas();
                }
                if (sTipo != "Ventas")
                {
                    // Compras o Balance
                    Compras();
                }
                if (sTipo == "Balance")
                {
                    // Balance
                    Balance();
                }
                if (sTipo == "Ventas")
                {
                    // Ventas
                    trCompras.Visible = false;
                    trBalance.Visible = false;
                }
                if (sTipo == "Compras")
                {
                    // Compras
                    trVentas.Visible = false;
                    trBalance.Visible = false;
                }
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }

    protected void CargarVentas()
    {
        try
        {
            List<VentasDet> ventasDet = new List<VentasDet>();
            ventasDet = (List<VentasDet>)Session["ventasDet"];

            gvVentas.DataSource = ventasDet;
            gvVentas.DataBind();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }

    protected void CargarCompras()
    {
        try
        {
            List<ComprasDet> comprasDet = new List<ComprasDet>();
            comprasDet = (List<ComprasDet>)Session["comprasDet"];

            gvCompras.DataSource = comprasDet;
            gvCompras.DataBind();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }

    protected void Ventas()
    {
        try
        {
            Ventas ventasD = new Ventas();
            Ventas ventasH = new Ventas();
            BMVentasDet bmVentasDet = new BMVentasDet(Connection);
            Stock stock = (Stock)Session["Stock"];
            Decimal dKilos = 0;
            Decimal dTotal = 0;

            ventasD.Fecha = FechaD.GetFecha();
            ventasH.Fecha = FechaH.GetFecha();
            // ventasD.Id_Estado = 1;   el Store Procedure ya lo hace.
            List<VentasDet> listaVentasDet = new List<VentasDet>();
            VentasDet ventaDet = new VentasDet();
            ventaDet.Id_Rubro = stock.Id_Rubro;
            ventaDet.Id_SubRubro = stock.Id_SubRubro;
            ventaDet.Id_Articulo = stock.Id_Articulo;
            listaVentasDet = bmVentasDet.BMVentasDetGetAllByArticulo(ventaDet, ventasD, ventasH);
            if (listaVentasDet.Count > 0)
            {
                foreach (VentasDet item in listaVentasDet)
                {
                    dKilos += item.Kilos;
                    dTotal += item.Monto;
                }
                lblCVentas.Text = listaVentasDet.Count.ToString();
                lblKVentas.Text = dKilos.ToString("###,###,###,##0.00");
                lblTVentas.Text = dTotal.ToString("###,###,###,##0.00");
                lblAccion.Text = "Informe de VENTAS para el período";
            }
            else
            {
                lblAccion.Text = "No hay VENTAS en este período";
            }

            Session["ventasDet"] = listaVentasDet;
            gvVentas.DataSource = listaVentasDet;
            gvVentas.DataBind();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }

    protected void Compras()
    {
        try
        {
            Compras comprasD = new Compras();
            Compras comprasH = new Compras();
            BMComprasDet bmComprasDet = new BMComprasDet(Connection);
            Stock stock = (Stock)Session["Stock"];
            Decimal dKilos = 0;
            Decimal dTotal = 0;

            comprasD.Fecha = FechaD.GetFecha();
            comprasH.Fecha = FechaH.GetFecha();
            // comprasD.Id_Estado = 1;   el Store Procedure ya lo hace.
            List<ComprasDet> listaComprasDet = new List<ComprasDet>();
            ComprasDet compraDet = new ComprasDet();
            compraDet.Id_Rubro = stock.Id_Rubro;
            compraDet.Id_SubRubro = stock.Id_SubRubro;
            compraDet.Id_Articulo = stock.Id_Articulo;
            listaComprasDet = bmComprasDet.BMComprasDetGetAllByArticulo(compraDet, comprasD, comprasH);
            if (listaComprasDet.Count > 0)
            {
                foreach (ComprasDet item in listaComprasDet)
                {
                    dKilos += item.Kilos;
                    dTotal += item.Monto;
                }
                lblCCompras.Text = listaComprasDet.Count.ToString();
                lblKCompras.Text = dKilos.ToString("###,###,###,##0.00");
                lblTCompras.Text = dTotal.ToString("###,###,###,##0.00");
                lblAccion.Text = "Informe de COMPRAS para el período";
            }
            else
            {
                lblAccion.Text = "No hay COMPRAS en este período";
            }

            Session["comprasDet"] = listaComprasDet;
            gvCompras.DataSource = listaComprasDet;
            gvCompras.DataBind();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }

    protected void Balance()
    {
        try
        {
            Int32 iCantidad = Convert.ToInt32(lblCVentas.Text) + Convert.ToInt32(lblCCompras.Text);
            lblCantidad.Text = iCantidad.ToString();
            Decimal dSaldo = Convert.ToDecimal(lblKVentas.Text) - Convert.ToDecimal(lblKCompras.Text);
            lblSaldo.Text = dSaldo.ToString("###,###,###,##0.00");
            Decimal dTotal = Convert.ToDecimal(lblTVentas.Text) - Convert.ToDecimal(lblTCompras.Text);
            lblTotal.Text = dTotal.ToString("###,###,###,##0.00");
            if (iCantidad > 0)
            {
                lblAccion.Text = "Balance para el período";
            }
            else
            {
                lblAccion.Text = "No hay Operaciones en este período";
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }

    #endregion

    #region Métodos

    #region Limpiar
    protected void Limpiar()
    {
        try
        {
            lblAccion.Text = "Seleccione Período a Evaluar";
            //lblCantidad.Text = "";
            //lblTotal.Text = "";
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #endregion
}
